﻿/*
# -*- coding: utf-8 -*-
# 注意：

# 若希望将本代码用于商业用途，需先联系作者并获得明确授权。
# 作者不对因使用本代码引发的任何直接或间接损失负责。
# 如有违反上述条款的行为，作者保留追究法律责任的权利。

# 免责声明：
# 请尊重知识产权，遵循相关法律法规。

# Notice:
# If you wish to use this code for commercial purposes, you must contact the author and obtain explicit authorization.
# The author is not responsible for any direct or indirect losses caused by the use of this code.
# If any of the above terms are violated, the author reserves the right to pursue legal action.
# Disclaimer:
# Please respect intellectual property rights and comply with relevant laws and regulations.

# Внимание:
# Если вы хотите использовать этот код в коммерческих целях, вам необходимо связаться с автором и получить явное разрешение.
# Автор не несет ответственности за любые прямые или косвенные убытки, возникшие в результате использования этого кода.
# В случае нарушения вышеуказанных условий автор оставляет за собой право на юридическое преследование.
# Отказ от ответственности:
# Пожалуйста, уважайте интеллектуальную собственность и соблюдайте соответствующие законы и нормативные акты.

# Attention :
# Si vous souhaitez utiliser ce code à des fins commerciales, vous devez contacter l'auteur et obtenir une autorisation explicite.
# L'auteur n'est pas responsable des pertes directes ou indirectes causées par l'utilisation de ce code.
# En cas de violation des conditions ci-dessus, l'auteur se réserve le droit de poursuivre une action en justice.
# Avertissement :
# Veuillez respecter les droits de propriété intellectuelle et vous conformer aux lois et réglementations en vigueur.

# 注意：

# 若希望将本代码用于商业用途，需先联系作者并获得明确授权。
# 作者不对因使用本代码引发的任何直接或间接损失负责。
# 如有违反上述条款的行为，作者保留追究法律责任的权利。

# 免责声明：
# 请尊重知识产权，遵循相关法律法规。

# Notice:
# If you wish to use this code for commercial purposes, you must contact the author and obtain explicit authorization.
# The author is not responsible for any direct or indirect losses caused by the use of this code.
# If any of the above terms are violated, the author reserves the right to pursue legal action.
# Disclaimer:
# Please respect intellectual property rights and comply with relevant laws and regulations.

# Внимание:
# Если вы хотите использовать этот код в коммерческих целях, вам необходимо связаться с автором и получить явное разрешение.
# Автор не несет ответственности за любые прямые или косвенные убытки, возникшие в результате использования этого кода.
# В случае нарушения вышеуказанных условий автор оставляет за собой право на юридическое преследование.
# Отказ от ответственности:
# Пожалуйста, уважайте интеллектуальную собственность и соблюдайте соответствующие законы и нормативные акты.

# Attention :
# Si vous souhaitez utiliser ce code à des fins commerciales, vous devez contacter l'auteur et obtenir une autorisation explicite.
# L'auteur n'est pas responsable des pertes directes ou indirectes causées par l'utilisation de ce code.
# En cas de violation des conditions ci-dessus, l'auteur se réserve le droit de poursuivre une action en justice.
# Avertissement :
# Veuillez respecter les droits de propriété intellectuelle et vous conformer aux lois et réglementations en vigueur.

# 注意：

# 若希望将本代码用于商业用途，需先联系作者并获得明确授权。
# 作者不对因使用本代码引发的任何直接或间接损失负责。
# 如有违反上述条款的行为，作者保留追究法律责任的权利。

# 免责声明：
# 请尊重知识产权，遵循相关法律法规。

# Notice:
# If you wish to use this code for commercial purposes, you must contact the author and obtain explicit authorization.
# The author is not responsible for any direct or indirect losses caused by the use of this code.
# If any of the above terms are violated, the author reserves the right to pursue legal action.
# Disclaimer:
# Please respect intellectual property rights and comply with relevant laws and regulations.

# Внимание:
# Если вы хотите использовать этот код в коммерческих целях, вам необходимо связаться с автором и получить явное разрешение.
# Автор не несет ответственности за любые прямые или косвенные убытки, возникшие в результате использования этого кода.
# В случае нарушения вышеуказанных условий автор оставляет за собой право на юридическое преследование.
# Отказ от ответственности:
# Пожалуйста, уважайте интеллектуальную собственность и соблюдайте соответствующие законы и нормативные акты.

# Attention :
# Si vous souhaitez utiliser ce code à des fins commerciales, vous devez contacter l'auteur et obtenir une autorisation explicite.
# L'auteur n'est pas responsable des pertes directes ou indirectes causées par l'utilisation de ce code.
# En cas de violation des conditions ci-dessus, l'auteur se réserve le droit de poursuivre une action en justice.
# Avertissement :
# Veuillez respecter les droits de propriété intellectuelle et vous conformer aux lois et réglementations en vigueur.

# 注意：

# 若希望将本代码用于商业用途，需先联系作者并获得明确授权。
# 作者不对因使用本代码引发的任何直接或间接损失负责。
# 如有违反上述条款的行为，作者保留追究法律责任的权利。

# 免责声明：
# 请尊重知识产权，遵循相关法律法规。

# Notice:
# If you wish to use this code for commercial purposes, you must contact the author and obtain explicit authorization.
# The author is not responsible for any direct or indirect losses caused by the use of this code.
# If any of the above terms are violated, the author reserves the right to pursue legal action.
# Disclaimer:
# Please respect intellectual property rights and comply with relevant laws and regulations.

# Внимание:
# Если вы хотите использовать этот код в коммерческих целях, вам необходимо связаться с автором и получить явное разрешение.
# Автор не несет ответственности за любые прямые или косвенные убытки, возникшие в результате использования этого кода.
# В случае нарушения вышеуказанных условий автор оставляет за собой право на юридическое преследование.
# Отказ от ответственности:
# Пожалуйста, уважайте интеллектуальную собственность и соблюдайте соответствующие законы и нормативные акты.

# Attention :
# Si vous souhaitez utiliser ce code à des fins commerciales, vous devez contacter l'auteur et obtenir une autorisation explicite.
# L'auteur n'est pas responsable des pertes directes ou indirectes causées par l'utilisation de ce code.
# En cas de violation des conditions ci-dessus, l'auteur se réserve le droit de poursuivre une action en justice.
# Avertissement :
# Veuillez respecter les droits de propriété intellectuelle et vous conformer aux lois et réglementations en vigueur.

# 注意：

# 若希望将本代码用于商业用途，需先联系作者并获得明确授权。
# 作者不对因使用本代码引发的任何直接或间接损失负责。
# 如有违反上述条款的行为，作者保留追究法律责任的权利。

# 免责声明：
# 请尊重知识产权，遵循相关法律法规。

# Notice:
# If you wish to use this code for commercial purposes, you must contact the author and obtain explicit authorization.
# The author is not responsible for any direct or indirect losses caused by the use of this code.
# If any of the above terms are violated, the author reserves the right to pursue legal action.
# Disclaimer:
# Please respect intellectual property rights and comply with relevant laws and regulations.

# Внимание:
# Если вы хотите использовать этот код в коммерческих целях, вам необходимо связаться с автором и получить явное разрешение.
# Автор не несет ответственности за любые прямые или косвенные убытки, возникшие в результате использования этого кода.
# В случае нарушения вышеуказанных условий автор оставляет за собой право на юридическое преследование.
# Отказ от ответственности:
# Пожалуйста, уважайте интеллектуальную собственность и соблюдайте соответствующие законы и нормативные акты.

# Attention :
# Si vous souhaitez utiliser ce code à des fins commerciales, vous devez contacter l'auteur et obtenir une autorisation explicite.
# L'auteur n'est pas responsable des pertes directes ou indirectes causées par l'utilisation de ce code.
# En cas de violation des conditions ci-dessus, l'auteur se réserve le droit de poursuivre une action en justice.
# Avertissement :
# Veuillez respecter les droits de propriété intellectuelle et vous conformer aux lois et réglementations en vigueur.

 */
using UnityEngine;
using UnityEngine.UI;

public class UIController : MonoBehaviour {
	private static UIController instance;
	[SerializeField]GameObject oldManBar;
	[SerializeField]GameObject levelCompletePanel;
	[SerializeField]GameObject scoreTopLeft;
	[SerializeField]GameObject menuPanel;
	[SerializeField] GameObject levelSelector;

	[SerializeField]Text scoreTop, scorePanel;
	[SerializeField] Text deadTop, deadPanel;
	[SerializeField] Text starTop, starPanel;

	[SerializeField]LevelButton levelButtonPrefabs;
	[SerializeField]Transform levelPanel;
	[SerializeField] Sprite[] levelNumberSprite;
	[SerializeField]Sprite lockSprite;
	[SerializeField] Image enlessModeImg;
	[SerializeField] Sprite lockedEnless, unlockedEnless;

	Vector3 showPos{get { return new Vector3 (oldManBar.transform.position.x, 1.75f, 90f);}}
	Vector3 hidePos {get { return new Vector3 (oldManBar.transform.position.x, 6.8f, 90f);}}

	private Button startButton;
	[SerializeField]private Button nextLevel;
	[SerializeField]private Button backToMenu;
	[SerializeField]private Button homeBtn;
	private void Awake()
	{
        instance = this;
		startButton = menuPanel.transform.GetChild(1).gameObject.AddComponent<Button> ();
		startButton.onClick.AddListener (LevelSelector);
		nextLevel.onClick.AddListener (NextLevel);
		backToMenu.onClick.AddListener (BackMenu);
		homeBtn.onClick.AddListener (BackMenu);
	}

	private void Start()
	{
		CheckEnlessMode ();
		SpawnLevel (true);
		//AdsControl.Instance.ShowBanner ();
	}
	private void NextLevel()
	{
		GameController.IsMenu = false;
		GameController.gameStage = GameStage.WAIT;
	}
	private void BackMenu()
	{
		GameController.IsMenu = true;
		GameController.gameStage = GameStage.WAIT;
	}
	private void LevelSelector()
	{
		menuPanel.SetActive (false);
		levelSelector.SetActive (true);
	}
	public static void Wait(bool menu)
	{
		if (menu) {
			instance.menuPanel.SetActive (true);
			instance.levelSelector.SetActive (false);
			instance.levelCompletePanel.SetActive (false);
			instance.levelCompletePanel.transform.position = instance.hidePos;
			instance.scoreTopLeft.SetActive (true);
		} else {
			instance.menuPanel.SetActive (false);
			instance.levelSelector.SetActive (true);
			instance.levelCompletePanel.SetActive (false);
			instance.levelCompletePanel.transform.position = instance.hidePos;
			instance.scoreTopLeft.SetActive (true);
		}
	}
	public static void Play()
	{
		instance.levelSelector.SetActive (false);
		instance.levelCompletePanel.SetActive (false);
		instance.levelCompletePanel.transform.position = instance.hidePos;
		instance.scoreTopLeft.SetActive (true);
	}

	public static void GameOver()
	{
		instance.levelCompletePanel.SetActive (true);
		instance.levelCompletePanel.transform.position =instance. hidePos;
		iTween.MoveTo(instance.levelCompletePanel,iTween.Hash("position",instance.showPos,"time",0.85f,"easeType",iTween.EaseType.easeOutBounce));
		instance.scoreTopLeft.SetActive (false);
	}


	public static void SetText(int index, int value)
	{
		switch (index) {
		case 0:
			instance.scoreTop.text = value.ToString ();
			instance.scorePanel.text = value.ToString ();
			break;
		case 1:
			instance.deadTop.text = value.ToString ();
			instance.deadPanel.text = value.ToString ();
			break;
		case 2:
			instance.starTop.text = value.ToString ();
			instance.starPanel.text = value.ToString ();
			break;
		}
	}

	LevelButton[] level = new LevelButton[15];
	public static void SpawnLevel(bool fistInit)
	{
		if (fistInit) {
			for (int i = 0; i < 15; i++) {
				var spawnedLevel = instance. levelButtonPrefabs.Spawn (Vector2.zero);
				spawnedLevel.transform.SetParent (instance.levelPanel);
				spawnedLevel.transform.localScale = Vector2.one;
				spawnedLevel.index = i;
				instance.level [i] = spawnedLevel;
				if (i <= GameController.gameLevel) {
					spawnedLevel.GetComponent<Image> ().sprite = instance.levelNumberSprite [i];
				} else {
					spawnedLevel.GetComponent<Image> ().sprite = instance.lockSprite;
				}
			}
		} else {
			for (int i = 0; i < 15; i++) {
				if (i <= GameController.gameLevel) {
					instance.level[i].GetComponent<Image> ().sprite = instance.levelNumberSprite [i];
				} else {
					instance.level[i].GetComponent<Image> ().sprite = instance.lockSprite;
				}
			}
		}
	}
	private void CheckEnlessMode()
	{
		if (GameController.gameLevel < 14) {
			enlessModeImg.sprite = lockedEnless;
		} else {
			enlessModeImg.sprite = unlockedEnless;
		}
	}
}
